.. _ecmIxMot_Spline_Start: ecmIxMot_Spline_Start ===================== --------------------- SYNOPSIS -------- .. code-block:: none t_cmdidx ecmIxMot_Spline_Start( t_i32 NetID, t_i32 MapIndex, t_handle32 hSplineObj, t_bool IsReverseDir, t_i32 *ErrCode ) DESCRIPTION ----------- - 지정된 보간맵의 스플라인 보간 이송을 수행합니다. PARAMETER --------- - NetID : Network 번호 - MapIndex : 맵 번호 - hSplineObj : 스플라인 보간 오브젝트 생성시 반환된 오브젝트 핸들값 - IsReverseDir : 이송 방향을 결정합니다 +-------+------------------------+ | Value | Meaning | +=======+========================+ | 0 | 순방향으로 이송합니다. | +-------+------------------------+ | 1 | 역방향으로 이송합니다. | +-------+------------------------+ - ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다. RETURN VALUE ------------ - 이 리턴값은 함수의 cmdidx를 반환합니다. EXAMPLE ````````````` .. code-block:: cpp :linenos: /************************************************************************************ *이 예제는 15개의 좌표를 등록하고 3개의 축으로 스플라인 보간하는 예제입니다. * 사용자는 이 예제를 보고 응용하여 사용하기를 바랍니다. ************************************************************************************/ #include "ComiEcatSdk_Api.h" #define NUM_IX_SPLINE_AXES 3 t_i32 anAxisList[NUM_IX_SPLINE_AXES] = {0, 1, 2}; #define NUM_IX_SPLINE_REF_POINTS 15 #define POS_GAIN 1.0 t_f64 afPoint[NUM_IX_SPLINE_REF_POINTS][NUM_IX_SPLINE_AXES] = { {0, 0.0, 0}, {0, 200000.0, 200000.0}, {0, 300000.0, 300000.0}, {0, 400000.0, 400000.0}, {1002.5, 420000.0, 420001}, {6350.8, 450000.0, 450045}, {26795, 500000.0, 500718}, {80000, 560000.0, 565685}, {112822, 580000.0, 590871}, {137550, 590000.0, 605821}, {200000, 600000.0, 632455}, {250000, 600000.0, 682455}, {350000, 600000.0, 782455}, {500000, 600000.0, 932455}, {600000, 600000.0, 1032455} }; #define MAP2 2 t_32 Error_Num = 0;//함수 별 에러 코드 저장 변수 t_handle32 hSplineObj = 0; // 스플라인 보간 오브젝트의 핸들 값 저장 변수 /*************************************************************** * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 * 적용되는 부분을 의미합니다. ***************************************************************/ void OnProgramInitial() { TEcDevInfo Device_Info; //디바이스 정보 저장 할 구조체 t_i32 Device_Num = 0; t_success nIsLoaded = ecDll_Load (); if(!ecGn_LoadDevices(&Error_Num)){ //장치 로드 //로드 실패시 예외 처리 } if(!ecGn_GetDevInfo(Device_Num,&Device_Info, &Error_Num)){ //디바이스 정보 로드 실패 시 예외 처리 } ecNet_SetAlState(Device_Info.NetIdx, ecAL_STATE_OP, &Error_Num); //ALState OP모드로 전환 ecmSxCtl_SetSvon(Device_Info.NetIdx, 0, &Error_Num); ecmSxCtl_SetSvon(Device_Info.NetIdx, 1, &Error_Num); ecmSxCtl_SetSvon(Device_Info.NetIdx, 2, &Error_Num); ecmIxCfg_MapAxes(Device_Info.NetIdx, MAP2 , 3, anAxisList, &Error_Num); //3축을 보간맵 2번으로 그룹 설정 } /*************************************************************** * OnSetting() : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 * 적용되는 부분을 의미합니다. * 스플라인 보간 이송 설정 부분을 하는 함수 입니다. * 속도 가속도 등 여러 정보 값들은 적절한 값이라고 가정합니다. ***************************************************************/ void OnSetting() { ecmIxCfg_SetSpeedPatt(Device_Info.NetIdx, MAP2, IsVectorSpd, SpdMode, m_ini, m_end, m_work, m_acc, m_dec, NULL); //속도, 가속도, 감속도 설정 ecmIxCfg_SetJerkRatio(Device_Info.NetIdx, MAP2, m_jerk, NULL); //Jeck 값 설정 } /********************************************************************* *OnClickedBuild() : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 * 적용되는 부분을 의미합니다. * 빌드 버튼 클릭 시 스플라인 오브젝트 빌드를 하는 함수 입니다. * 오브젝트 해제 -> 오브젝트 생성 -? 좌표 설명 -> 빌드 순서로 진행 **********************************************************************/ void OnClickedBuild() { if(!ecmIxCfg_Spline_ClearPool(Device_Info.NetIdx, MAP2, &Error_Num) //오브젝트 해제 함수 { //오브젝트 해제 실패 시 예외 처리 } hSplineObj = ecmIxCfg_Spline_AddNewObj (Device_Info.NetIdx, MAP2, NUM_IX_SPLINE_REF_POINTS, g_Point, & Error_Num); // 스플라인 보간 오브젝트 생성 for(int i=0; i